#pragma once


#include <Math/Quaternionf.hpp>


TEST( Quaternionf, BasicConstruction )
{
	using Math::Quaternionf;

	Quaternionf	test( 1.0f, 2.0f, 3.0f, 4.0f );
	EXPECT_FLOAT_EQ( 1.0f, test.X() );
	EXPECT_FLOAT_EQ( 2.0f, test.Y() );
	EXPECT_FLOAT_EQ( 3.0f, test.Z() );
	EXPECT_FLOAT_EQ( 4.0f, test.W() );
}


TEST( Quaternionf, CopyConstruction )
{
	using Math::Quaternionf;
	
	Quaternionf	orig( 1.0f, 2.0f, 3.0f, 4.0f );
	Quaternionf	test( orig );
	EXPECT_FLOAT_EQ( 1.0f, test.X() );
	EXPECT_FLOAT_EQ( 2.0f, test.Y() );
	EXPECT_FLOAT_EQ( 3.0f, test.Z() );
	EXPECT_FLOAT_EQ( 4.0f, test.W() );
}


TEST( Quaternionf, ElementAssignment )
{
	using Math::Quaternionf;
	
	Quaternionf	test	=	Quaternionf::Zero();
	test.X( 1.0f );
	test.Y( 2.0f );
	test.Z( 3.0f );
	test.W( 4.0f );
	EXPECT_FLOAT_EQ( 1.0f, test.X() );
	EXPECT_FLOAT_EQ( 2.0f, test.Y() );
	EXPECT_FLOAT_EQ( 3.0f, test.Z() );
	EXPECT_FLOAT_EQ( 4.0f, test.W() );
}
